export enum Direction {
  UP = 'UP',
  DOWN = 'DOWN',
  LEFT = 'LEFT',
  RIGHT = 'RIGHT'
}

export enum Difficulty {
  EASY = 'EASY',
  MEDIUM = 'MEDIUM',
  HARD = 'HARD'
}

export enum FoodType {
  NORMAL = 'NORMAL',
  GOLDEN = 'GOLDEN',
  RAINBOW = 'RAINBOW'
}

export interface Position {
  x: number;
  y: number;
}

export interface Food extends Position {
  type: FoodType;
  points: number;
  expiresAt: number;
}

export interface GameState {
  snake: Position[];
  food: Food | null;
  direction: Direction;
  score: number;
  isPlaying: boolean;
  gameOver: boolean;
  difficulty: Difficulty;
  combo: number;
  isInvincible: boolean;
  invincibilityTime: number;
  highScore: number;
  wallHitsLeft: number;
  invincibleHitsCount: number;
  scoreToNextInvincible: number;
}

export interface DifficultySettings {
  BASE_SPEED: number;
  MAX_SPEED: number;
  SPEED_INCREMENT: number;
  WALL_HIT_LIMIT: number;
}

export interface Achievement {
  id: string;
  name: string;
  description: string;
  condition: (state: GameState) => boolean;
  achieved: boolean;
}

export interface GameSettings {
  gridSize: number;
  cellSize: number;
  initialSnakeLength: number;
  baseSpeed: number;
  maxSpeed: number;
  speedIncrementScore: number;
  speedIncrementPercent: number;
  wallHits: number;
} 